package com.ntl.webcore.tools.spring.reflect;

import com.ntl.webcore.tools.spring.bean.SpringUtils;
import org.springframework.util.ReflectionUtils;

import java.lang.reflect.Method;

/**
 * SpringService 反射工具类
 */
public class SpringServiceInvokeUtil {
/**
 * 反射执行 Spring容器中的Service的方法
 * @param serviceName
 *            服务名称
 * @param methodName
 *            方法名称
 * @param params
 *            参数
 * @return
 * @throws Exception
 */
public static Object springInvokeMethod(String serviceName, String methodName, Object[] params) throws Exception {
    try{
        Object service = SpringUtils.getBean(serviceName);
        Class<? extends Object>[] paramClass = null;
        if (params != null) {
            int paramsLength = params.length;
            paramClass = new Class[paramsLength];
            for (int i = 0; i < paramsLength; i++) {
                paramClass[i] = params[i].getClass();
            }
        }
        // 找到方法
        Method method = ReflectionUtils.findMethod(service.getClass(), methodName, paramClass);
        // 执行方法
        return ReflectionUtils.invokeMethod(method, service, params);
    }catch(Exception e){
        e.printStackTrace();
        throw e;
    }
}

}
